Q: QuickTime Ç™ MP3 å`éÆÇÃâπäyÉtÉ@ÉCÉãÇà ID3 É^ÉOÇ÷ÇÃÉAÉNÉZÉXÇâ¬î\Ç…Ç∑ÇÈÇÃÇÕímǡǃǢNjÇ∑Ç™ÅAǪÇÃã@î\ÇÃóòópï˚ñ@Ç™ÇÌÇ©ÇËÇ‹ÇπÇÒÅBéÑÇÕÅAã»ÇÃÉ^ÉCÉgÉãÅAÉAÉãÉoÉÄÇÃÉ^ÉCÉgÉãÅAÉAÅ[ÉeÉBÉXÉgñºÅAî≠ï\îNÅAÇ®ÇÊÇ—ÉgÉâÉbÉNî‘çÜÇÃèÓïÒǙǫǧǵǃLJïKóvÇ»ÇÃÇ≈Ç∑ÅB
A: QuickTime/MP3 ÇÃ Movie Importer ÇÕ ID3
É^ÉOÇîFéØÇµÅAǪÇÍÇÁÇÉÄÅ[ÉrÅ[ÇÃÉÜÅ[ÉUÉfÅ[É^ÇΔǵǃï€ë∂Ç≥ÇÍÇÈÉÄÅ[ÉrÅ[ÇÃíçéflÇ…ïœä∑ǵNjÇ∑ÅB.mp3 ÉtÉ@ÉCÉãÇÉÄÅ[ÉrÅ[ÇΔǵǃÉCÉìÉ|Å[ÉgǵÅAǪÇÃå„ GetMovieUserDataÅAGetNextUserDataTypeÅAÇ®ÇÊÇ—
GetUserDataText ÇÃÇÊǧǻ Movie Toolbox API ÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃÅADZÇÃÉÜÅ[ÉUÉfÅ[É^Ç…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
ÉäÉXÉg 1 Ç…é¶Ç∑ÉRÅ[ÉhÇÕÅAÉÜÅ[ÉUÉfÅ[É^ÇÃÉäÉXÉgÇéÛÇØéÊÇËÅAÉÜÅ[ÉUÉfÅ[É^ÇÃçÄñ⁄ÇÉRÉìÉ\Å[ÉãÇ…èoóÕǵNjÇ∑ÅBÉÜÅ[ÉUÉfÅ[É^ÇÃäeÉ^ÉCÉvÇÕàÍà”ÇÃéØï éqÇéùǡǃǢNjÇ∑ÅBÇΩÇΔǶnjéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
kUserDataTextFullName =
FOUR_CHAR_CODE('©nam')
kUserDataTextArtist = FOUR_CHAR_CODE('©ART')
kUserDataTextAlbum = FOUR_CHAR_CODE('©alb')
ãªñ°ê[Ç¢ÉÜÅ[ÉUÉfÅ[É^É^ÉCÉvÇÃÉäÉXÉgÇå©ÇÈÇ…ÇÕ Movies.h ÇéQèΔǵNjÇ∑ÅB
Movie ÇÃÉgÉâÉbÉNÇΔÉÅÉfÉBÉALJìΔé©ÇÃÉÜÅ[ÉUÉfÅ[É^ÉäÉXÉgÇéùǡǃǢNjÇ∑ÅBDZÇÍÇÁÇÃÉäÉXÉgÇÕǪÇÍǺÇÍÅAGetTrackUserData Ç‹ÇΩÇÕ GetMediaUserData ÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃÉAÉNÉZÉXÇ≈Ç´Ç‹Ç∑ÅB
const UInt8 kUserDataIsText = 0xA9; // íòçÏå†ãLçÜ
OSErr PrintUserData(UserData inUserData)
{
OSType udType;
short count, i;
char nul = 0;
Handle hData = NULL;
Ptr p;
OSErr err = noErr;
hData = NewHandle(0);
udType = GetNextUserDataType(inUserData, 0);
if(0 != udType) {
printf("\nMeta-data:\n");
do {
count = CountUserDataType(inUserData, udType);
for(i = 1; i <= count; i++) {
if((udType>>24) == kUserDataIsText) {
// udType ÇÃç≈èâÇÃï∂éöÇ™ 0xA9ÅiíòçÏå†ãLçÜÅjÇÃèÍçáÅA
// GetUserData ÇÃë„ÇÌÇËÇ… GetUserDataText ÇégópÇ∑ÇÈÅB
// ãªñ°ê[Ç¢ÉÜÅ[ÉUÉfÅ[É^É^ÉCÉvÇÃÉäÉXÉgÇå©ÇÈÇ…ÇÕ Movies.h ÇéQèΔÇ∑ÇÈ
err = GetUserDataText(inUserData, hData, udType, i, langEnglish);
if (err) goto bail;
// ÉnÉìÉhÉãÇ™éwÇ∑ï∂éöóÒÇÉkÉãÇ≈èIóπÇ∑ÇÈ
PtrAndHand(&nul, hData, 1);
// ÉLÉÉÉäÉbÉWÉäÉ^Å[ÉìÇÕÇ∑Ç◊ǃÉXÉyÅ[ÉXÇ…ïœä∑
p = *hData;
while(*p) {
if (*p == kReturnCharCode) *p = ' ';
p++;
};
HLock(hData);
printf(" %c%c%c%c: %s\n", (char)(udType>>24),
(char)(udType>>16),
(char)(udType>>8),
(char)udType, *hData);
HUnlock(hData);
} else {
err = GetUserData(inUserData, hData, udType, i);
if (err) goto bail;
printf(" %c%c%c%c: [%d bytes]\n",
(char)(udType>>24),
(char)(udType>>16),
(char)(udType>>8),
(char)udType, GetHandleSize(hData));
}
}
udType = GetNextUserDataType(inUserData, udType);
} while(0 != udType);
}
bail:
printf("\n");
// íçà”ÅFäÑÇËìñǃǃǢǻǢ UserData ÇÕîjä¸ÇµÇ»Ç¢
DisposeHandle(hData);
return err;
}
|
ÉäÉXÉg 1Å@PrintUserData
|
{
UserData userData = 0;
OSErr err;
...
userData = GetMovieUserData(theMovie);
if (userData) {
err = PrintUserData(userData);
}
...
}
|
ÉäÉXÉg 2Å@ÉäÉXÉg 1 ÇåƒÇ—èoÇ∑ÉRÅ[ÉhÇÃî≤êà
|
.mp3 ÉtÉ@ÉCÉãÇégǡǃÉäÉXÉg 1 Ç…ÇÊÇËê∂ê¨Ç≥ÇÍÇΩèoóÕÇÃó·
Meta-data:
©nam: allthewayhome.mp3
©ART: Spinal Tap
©alb: Break Like The Wind
©day: 1992
©trk: 14/14
©cmt: It goes to 11
|
éQçlï∂å£ÅF
Working
with Movie UserData
Track
Names - Ice Floe #2
[2002 îN 4 åé 8 ì˙]
|